#include "util.hpp"
#include <cstdlib>
#include <vector>
#include <functional>
using namespace std;

using func_t = function<void()>;

#define INIT(v)                  \
    do                           \
    {                            \
        v.push_back(printlog);   \
        v.push_back(installlog); \
    } while (0);

#define EXITLOG(v)              \
    do                          \
    {                           \
        for (const auto &e : v) \
        {                       \
            e();                \
        }                       \
    } while (0);

int main()
{
    // 非阻塞式IO  在非阻塞期间能做自己的事情
    SetNonBlock(0); // 将fd设置为非阻塞
    vector<func_t> vf;
    INIT(vf);

    // 阻塞IO
    char buffer[1024];
    while (true)
    {
        // printf("Please#: ");
        // fflush(stdout);
        ssize_t n = read(0, buffer, sizeof(buffer) - 1);
        if (n > 0)
        {
            buffer[n - 1] = 0;
            std::cout << "echo#: " << buffer << std::endl;
        }
        else if (n == 0)
        {
            std::cout << "me too quit!" << std::endl;
            break;
        }
        else
        {
            // 读取出现错误  显示资源未就绪 错误？根据错误码分析是否是真的read错误，还是无资源
            // std::cout << "strerror: " << strerror(errno) << "errno: " << errno << std::endl;
            // break;

            if(errno == EAGAIN)
            {
                //非阻塞
                cout << "此时只是无数据，没有错误！" << endl;
                EXITLOG(vf);
            }
            else if(errno == EINTR)
            {
                cout<<"接受到了阻断信号,也不是read错误!"<<endl;
                continue;
            }
            else
            {
                cout << "strerror: " << strerror(errno) << "errno: " << errno << endl;
                break;
            }
        }
        sleep(1);
    }
    return 0;
}